//
// Created by PC on 2023/8/1.
// 有道图灵: 2023智慧杯编程思维赛c++普及组,测试题2/4 难度: 入门
//https://oj.youdao.com/contest/10534/answer#/problem/15299
// 得分40/100, 通过了4个测试点, 3个点超时, 3个点错误
/*
 质数时间
题目描述
如果把一年之中的某个时间写作a月b日c时分e秒的形式，当这五个数都为质数时，我们把这样的时间叫做质数时间，现已知起始时刻是 2022 年的a月b日c时d分e秒，终止时是 2022年的u月v日w时x分y秒，请你统计在这段时间中有多少个质数时间?
输入描述
输入共 (2*T+1)行。第一行一个整数工，代表共有 T 组查询。接下来2*T行，对于每组查询，先输人一行五个整数a、b、c、d、e，代表起始时刻。再输人一行五个整数u、u、w、x、y，代表终止时刻对于每组查询保证输人的起始时刻不晚于终止时刻。
输出描述
输出共T行，一行一个整数，表示对于每组查询输入统计到的从a月b日c时d分e秒到u月 v日w时x分y秒中质时间的个数. 多组查询结果用换行分隔.
 样例:
 输入:
3
3 3 3 3 0
3 3 3 5 59
7 2 6 45 32
7 29 15 30 54
2 6 2 45 32
12 3 16 56 8
 输出:
 34
 24276
 127449
 时间限制 1ms 内存限制 256M
 * */
//


#include <iostream>

using namespace std;

bool isPrime(int n)
{
    if (n < 2)
        return false;
    if (n == 2)
        return true;
    for (int i = 2; i * i <= n; ++i)
    {
        if (n % i == 0)
            return false;
    }
    return true;
}

int main()
{
    int t = 1;
    cin>>t;
//    int a[5] = {3, 3, 3, 3, 0};
//    int b[5] = {3, 3, 3, 5, 59};
//    int a[]={7,2,6,45,32};
//    int b[]={7,29,15,30,54};
    int a[]={2,6,2,45,32};
    int b[]={12,3,16,56,8};
    int days[] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
    while (t--)
    {
        int count = 0;
        for (int i = 0; i < 5; ++i)
            cin>>a[i];
        for (int i = 0; i < 5; ++i)
            cin>>b[i];
        // 月a[0]b[0]
        for (int i = a[0]; i <= b[0]; ++i)
        {
            if (!isPrime(i))
                continue;
            int j1, j2;
            // 不跨月的情况也就是a[0]==b[0]
            if ( a[0] == b[0])
            {
                j1 = a[1];
                j2 = b[1];
            }
                // 起始月
            else if (i == a[0])
            {
                j1 = a[1];
                j2 = days[i];
            }
                // 截止月
            else if (i == b[0])
            {
                j1 = 1;
                j2 = b[1];
            }
                // 中间月
            else
            {
                j1 = 1;
                j2 = days[i];
            }
            // day a[1]b[1]
            for (int j = j1; j <= j2; ++j)
            {
                if (!isPrime(j))
                    continue;
                // hour
                int k1, k2;
                // 不跨day的情况也就是a[1]==b[1]
                if ( a[1] == b[1])
                {
                    k1 = a[2];
                    k2 = b[2];
                }
                    // 起始day
                else if (j == a[1])
                {
                    k1 = a[2];
                    k2 = 23;
                }
                    // 截止day
                else if (j == b[1])
                {
                    k1 = 0; // 从0点开始
                    k2 = b[2];
                }
                    // 中间day
                else
                {
                    k1 = 0;
                    k2 = 23;
                }
                // hour a[2]b[2]
                for (int k = k1; k <= k2; ++k)
                {
                    if (!isPrime(k))
                        continue;
                    int l1, l2;
                    // 不跨hour的情况也就是a[2]==b[2]
                    if (a[2] == b[2])
                    {
                        l1 = a[3];
                        l2 = b[3];
                    }
                        // 起始hour
                    else if (k == a[2])
                    {
                        l1 = a[3];
                        l2 = 59;
                    }
                        // 截止hour
                    else if (k == b[2])
                    {
                        l1 = 0; // 从0分钟开始
                        l2 = b[3];
                    }
                        // 中间hour
                    else
                    {
                        l1 = 0;
                        l2 = 59;
                    }
                    // min a[3]b[3]
                    for (int l = l1; l <= l2; ++l)
                    {
                        if (!isPrime(l))
                            continue;
                        int m1, m2;
                        // 不跨min[3]==b[3]
                        if (a[3]== b[3])
                        {
                            m1 = a[4];
                            m2 = b[4];
                        }
                            // 起始min
                        else if (l == a[3])
                        {
                            m1 = a[4];
                            m2 = 59;
                        }
                            // 截止min
                        else if (l == b[3])
                        {
                            m1 = 0; // 从0 second开始
                            m2 = b[4];
                        }
                            // 中间min
                        else
                        {
                            m1 = 0;
                            m2 = 59;
                        }
                        for (int m = m1; m <= m2; ++m)
                        {
                            if (!isPrime(m))
                                continue;
//                            printf("%d - %d %d: %d' %d''\n", i, j, k, l, m);
                            count++;
                        }
                    }
                }
            }
        }
        cout<<count<<endl;
    }
    return 0;
}